iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
Vibe Coding

從 Vibe Coding 到系統架構:Gemini x Claude Code 雙 AI 協同開發 Godot 2D Roguelike 卡牌遊戲實戰系列 第 3

Day 03:【企劃收斂】從龐大野心到 10 關 MVP:AI 怎麼幫我砍掉八成的想法

  • 分享至 

  • xImage
  •  

我一開始也是這樣。
想做 Roguelike 卡牌遊戲時,很容易一下子想到 100 張卡牌、5 個職業、隨機生成地圖。然後坑越開越大,做到第三週可能就放棄。

所以今天不講怎麼增加功能,而是講一件更重要的事:
怎麼把想法砍掉八成,還能留下可以玩的遊戲。


一、我的起手式有多含糊?

Day 02 提過,我跟 Gemini 的第一句話是:

「想開發自己的 Roguelike 卡片文字遊戲,你有什麼建議,最簡單的遊戲會是什麼」

沒有規格、沒有玩法設計,就是一句:

「我想做這個,最簡單怎麼做?」

接下來的討論裡,我一路問:

完全沒有遊戲開發經驗該用什麼引擎?
只有 HP、護甲、攻擊力夠不夠?
能不能簡化成只有一個敵人?

這個階段可以隨便講,也可以隨時推翻自己的想法。
因為還沒有程式碼,改想法幾乎沒有成本。


二、第一刀:砍掉地圖

Roguelike 常見的元素是隨機地圖和角色走位。
但如果要做這些,就會多出:

  • TileMap
  • 角色控制
  • 碰撞偵測
  • 路徑規劃

所以我最後直接拿掉地圖。
改成:

Boss Rush。

不走地圖,只做一連串關卡。
這一刀砍掉的是一整套系統,只保留最終的戰鬥。


三、第二刀:砍掉職業

多職業聽起來很有趣,但每增加一個職業,就代表要增加:

  • 自己的卡牌
  • 自己的平衡
  • 自己的玩法
  • 更多測試

第一版如果做三個職業,工作量不只是多三倍,平衡也會變得更複雜。

所以第一版:

只做一套牌組。


四、第三刀:砍掉複雜數值

最後,我連角色數值也砍了。

參考我玩過的《Obsidian Knight: Roguelike RPG》,角色只留下三個核心數值:

數值 作用
HP(生命) 歸零就結束
Armor(護甲) 優先吸收傷害
Attack(攻擊力) 影響輸出

沒有魔力、沒有速度、沒有暴擊率,也沒有元素抗性。
因為我想先確認:

只靠這三個數值,能不能做出有趣的玩法?


五、砍完之後,只剩 10 關

前面砍掉這麼多東西之後,最後我跟 Gemini 收斂成一句很簡單的描述:

「那最簡單的是不是,一場只有一個敵人,就是魔王,然後我會撿 10 個寶箱拿到卡片,然後最後決戰大魔王」

《異世界救援》的基本結構,就這樣定下來了:

第 1~9 關:開寶箱,三選一,把卡加進牌組
第 10 關:用構築好的牌組打魔王

前 9 關負責構築
第 10 關負責驗收

沒有第三種關卡。

這個設計還有一個很實際的好處:

前 9 關可以共用同一套程式邏輯。

所以看起來是 10 關,實際上核心工作量可能只有 2 套系統。


六、只有三個數值,真的夠嗎?

這時候問題來了。

三個數值會不會太少?

我的答案是:

數值的數量不重要,重要的是它們會不會互相影響。

遊戲最核心的一條規則是:

受到傷害時,先扣護甲,護甲不夠才扣生命。

也就是:

func take_damage(incoming_damage: int):

    if armor >= incoming_damage:
        armor -= incoming_damage
    else:
        var remaining_damage = incoming_damage - armor
        armor = 0
        hp -= remaining_damage

    hp = max(hp, 0)

有了這條規則,卡牌就可以開始產生不同玩法。

卡牌 效果
斬擊 造成攻擊力的傷害
招架 獲得護甲
盾牌衝鋒 造成等同當前護甲值的傷害
破甲打擊 造成傷害並清空敵方護甲
賣血狂暴 扣自己血量換攻擊力

後面三張卡才是比較有意思的地方。
因為它們不是單純增加數值,而是讓:

護甲、攻擊力、生命互相產生關係。

所以:

三個數值不是限制,而是設計的支點。


一個之後真的出問題的地方

上面的程式碼是規劃階段的版本。
最後真正跑在遊戲裡的寫法不太一樣,會另外記錄「這次擋下了多少傷害」。
當時看起來只是不同寫法。
後來才發現,這個差異真的會出問題。

Day 22,我會講一個因此產生的 bug:

戰鬥日誌顯示「護甲擋下 2 點」,但玩家整場根本沒有護甲。


七、先玩玩看,再決定要不要開工

遊戲規則收斂之後,我還沒有馬上開始做 Godot。
我先問 Gemini:

「那是不是先設計 web 版,你能直接 demo?」

結果 Gemini 直接生成了一個可以互動的網頁版本,我自己點了幾輪。

Gemini 在對話中生成的網頁版遊戲原型,可以直接點擊出牌與戰鬥

🎬 實際試玩影片:Gemini 生成的網頁版遊戲原型

這一步我覺得非常值得保留。
因為做一個簡單的網頁原型,只需要幾分鐘。
但它可以先回答一個最重要的問題:

這個玩法本身到底好不好玩?

實際試玩後,我確認:

抽牌 → 出牌 → 觸發連段

這個核心循環可以成立。
所以我決定:

先用文字把玩法跑通,美術之後再換上去。

這也是目前 Godot 裡的狀態。

Godot 裡的戰鬥畫面,全部是純文字 Label 與預設樣式按鈕的灰模狀態

🎬 實際試玩影片:Godot 裡的灰模戰鬥畫面

到目前為止,它還是純文字灰模,但核心玩法已經可以跑起來。
因為如果純文字狀態下就不好玩,

加上美術也只會變成好看的不好玩。


八、這次收斂,我學到的三件事

這次不是單純把遊戲做小而已。
回頭看,我覺得有三個原則值得記下來。

1. 先砍系統,再砍內容

砍掉地圖,省下的是整套 TileMap、碰撞和路徑規劃。
砍掉 20 張卡牌,省下的只是 20 筆內容。

所以如果真的要縮小專案:

先砍掉會帶來大量連鎖工作的系統。

2. 留下會互相影響的數值

不是把數值砍得越少越好。
而是要留下那些會互相影響的數值。
HP、護甲、攻擊力雖然只有三個,卻可以透過卡牌互相作用,產生不同玩法。

3. 讓重複的部分佔大多數

10 關裡有 9 關使用同一套邏輯。
所以看起來是 10 關,實際上核心工作量可能只有** 2 套系統**
也因此,整個設計可以簡化很多。


九、今天的結論

這次企劃收斂:

砍掉地圖。
砍掉職業。
砍掉複雜數值。

留下:

3 個核心數值 + 10 關流程 + 一套核心戰鬥。

然後先做網頁原型,確認玩法可以成立,再正式開工。
在過程中很容易感覺到:

做遊戲不一定是一直增加東西,有時候真正困難的是知道什麼該拿掉。

最後企劃收斂完成,規格也寫進了 README.md

明天 Day 04,正式開工。

建資料夾、開 VS Code、安裝 Godot,然後讓 Claude Code 開始建立第一個真正的遊戲專案。


💬 你有沒有做到一半就放棄的 side project?現在回頭看,當初最該砍掉的是什麼?


上一篇
Day 02:【雙 AI 協同】我為什麼讓 Gemini 聊想法,Claude Code 直接施工?
下一篇
Day 04:【環境搭建】打造我的 Vibe Coding 工作台
系列文
從 Vibe Coding 到系統架構:Gemini x Claude Code 雙 AI 協同開發 Godot 2D Roguelike 卡牌遊戲實戰6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言